{
CountingData *count = data;
-#if 0
- /* We cannot reliably detect changes in widget visibility */
if (!gtk_widget_get_visible (widget))
return;
-#endif
if (count->widget == widget)
count->found = TRUE;
for (list = children; list; list = list->next)
{
-#if 0
- /* We cannot reliably detect changes in widget visibility */
if (!gtk_widget_get_visible (list->data))
- return;
-#endif
+ continue;
+
gtk_widget_path_append_for_widget (private->sibling_path, list->data);
}
g_list_free (children);
gtk_box_invalidate_order (GTK_BOX (widget));
}
+static void
+box_child_visibility_notify_cb (GObject *obj,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GtkBox *box = user_data;
+
+ gtk_box_invalidate_order (box);
+}
+
static void
gtk_box_pack (GtkBox *box,
GtkWidget *child,
gtk_box_invalidate_order (box);
gtk_widget_set_parent (child, GTK_WIDGET (box));
+ g_signal_connect (child, "notify::visible",
+ G_CALLBACK (box_child_visibility_notify_cb), box);
+
gtk_widget_child_notify (child, "expand");
gtk_widget_child_notify (child, "fill");
gtk_widget_child_notify (child, "padding");
was_visible = gtk_widget_get_visible (widget);
gtk_widget_unparent (widget);
+ g_signal_handlers_disconnect_by_func (widget,
+ box_child_visibility_notify_cb,
+ box);
+
priv->children = g_list_remove_link (priv->children, children);
g_list_free (children);
g_free (child);